package co.edu.udea.lab.iu.server;


import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import co.edu.udea.lab.bl.impl.DispositivoServiceImpl;
import co.edu.udea.lab.dto.Dispositivo;
import co.edu.udea.lab.iu.client.DispositivoService;
import co.edu.udea.lab.iu.shared.GWTLaboratorioException;
import co.edu.udea.lab.iu.shared.dto.DispositivoGWT;
import co.edu.udea.lab.util.exception.LabBLException;
import co.edu.udea.lab.util.exception.LabDAOException;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

public class DispositivoServiceImp extends RemoteServiceServlet implements DispositivoService{

	private static final long serialVersionUID = 1L;

	@Override
	public List<DispositivoGWT> obtenerTodos() throws GWTLaboratorioException {
		
		List<DispositivoGWT> lista = new ArrayList<DispositivoGWT>();
		try{
			ServletContext sc = getServletContext();
			ApplicationContext webApp = WebApplicationContextUtils.getWebApplicationContext(sc);
			
			DispositivoServiceImpl dispositivoService = (DispositivoServiceImpl) webApp.getBean("dispositivoService");
			
			for(Dispositivo dispositivo : dispositivoService.obtenerDispositivos()){
				
				DispositivoGWT dispositivoGWT = new DispositivoGWT();
				
				dispositivoGWT.setDescripcion(dispositivo.getDescripcion());
				dispositivoGWT.setEstado(dispositivo.getEstado());
				dispositivoGWT.setId(dispositivo.getId());
				dispositivoGWT.setModelo(dispositivo.getModelo());
				dispositivoGWT.setTipoDispositivo(dispositivo.getTipoDispositivo().getDescripcion());
				
				lista.add(dispositivoGWT);
			}
		}catch(LabDAOException | LabBLException e){
			throw new GWTLaboratorioException("No se pudo obtener los registros solicitados: " + e.getMessage());
		}
		return lista;
	}

	@Override
	public List<DispositivoGWT> obtenerTodos(String estado)
			throws GWTLaboratorioException {
		
		List<DispositivoGWT> lista = new ArrayList<DispositivoGWT>();
		try{
			ServletContext sc = getServletContext();
			ApplicationContext webApp = WebApplicationContextUtils.getWebApplicationContext(sc);
			
			DispositivoServiceImpl dispositivoService = (DispositivoServiceImpl) webApp.getBean("dispositivoService");
			
			for(Dispositivo dispositivo : dispositivoService.obtenerDispositivos(estado)){
				
				DispositivoGWT dispositivoGWT = new DispositivoGWT();
				
				dispositivoGWT.setDescripcion(dispositivo.getDescripcion());
				dispositivoGWT.setEstado(dispositivo.getEstado());
				dispositivoGWT.setId(dispositivo.getId());
				dispositivoGWT.setModelo(dispositivo.getModelo());
				dispositivoGWT.setTipoDispositivo(dispositivo.getTipoDispositivo().getDescripcion());
				
				lista.add(dispositivoGWT);
			}
		}catch(LabDAOException | LabBLException e){
			throw new GWTLaboratorioException("No se pudo obtener los registros solicitados: " + e.getMessage());
		}
		return lista;
	}

}